<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // 怎么生成一个基本包装类型的包装对象呢?
    {
        // let num = 1;
        // let str = "abc";
        // let bol = true;
        // console.log(num,str,bol);

        // 1- 通过实例化对应类型的构造函数
        // str是一个字符串类型的包装对象。
        // const _str = "abc";// 字符串
        // const str = new String(_str);// 包装对象
        // console.log(str);
        // console.log(str == _str);// true
        // console.log(str === _str);// false

        // 字符串可以使用对应包装对象下的属性及方法
        // const str = "abc";
        // console.log(str.length);// length来自于对应包装对象下的属性
        // console.log(str.charAt(str.length-1));// length来自于对应包装对象下的方法
        //
        // console.log(new String("abc"));



        // 2- 通过实例化Object生成对应的包装对象。
        // const str = "abc";
        // const str1 = new String(str);// 只能生成字符串类型的包装对象
        // const str2 = new Object(str);// 根据参数的类型，决定生成的包装对象
        // console.log(str,str1,str2);

        // const num = 1;
        // const num1 = new Number(num);
        // const num2 = new Object(num);
        // console.log(num,num1,num2);


    }
    // 基本包装类型不是对象，为什么会有属性呢?
    {
        // 基本包装类型：string,number,boolean
        // 答：基本包装类型下的属性以及方法均来自于对应包装对象下的属性及方法。
        // const str = "abc";
        // console.log(str.length);
        // console.log(str.slice(2));// c
    }
    // 引用类型和基本包装类型的区别？
    {
        // 1- 生命周期不同。（基本包装类型又称为临时对象类型）
        // 引用类型的数据一直存在内存中，而包装类型只是存在一瞬间。
        // const userName = "zhangsan";
        // console.log(userName.length);// 8
        // 隐式：
        // var _userName = new String(userName);
        // console.log(_userName.length);// 8
        // _userName = null;






        // 2- 基本包装类型不可以直接增加属性与方法
        // const userName = "zhangsan";
        // userName.age = 100;
        // console.log(userName.age);// undefined

        // 隐式：
        // var _userName = new String("zhangsan");
        // _userName.age = 100;
        // _userName = null;
        //
        // var _userName = new String("zhangsan");
        // console.log(_userName.age);// undefined

    }
    // 如何给基本类型添加方法或者属性呢？
    {
        // 为其对应的构造函数原型增加属性和方法
        String.prototype.age = 100;
        // var userName = "zhangsan";
        //
        // console.log(userName.age);// undefined
        // 隐式：
        const _userName = new String("zhangsan");
        console.log(_userName.age);// 100

    }
</script>
</html>